#include <iostream>
#include <vector>

using namespace std;

class Solution;

class ListNode {

friend class Solution;
public:
     int val;
     ListNode *next;
     ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
    ListNode* oddEvenList(ListNode* head) {
        ListNode* odd=head;
        ListNode* even=head->next;
        ListNode* copy=even;
        while(even->next!=NULL){
            cout<<"odd:"<<odd->val<<",even:"<<even->val<<endl;
            if(odd->next->next!=NULL){
                odd->next=even->next;
                odd=even->next;
            }
            if(even->next->next!=NULL){
                even->next=odd->next;
                even=odd->next;
            }
            cout<<"odd:"<<odd->val<<",even:"<<even->val<<endl;
            if(even->next->next==NULL){
                break;
            }
        }
        cout<<"even:"<<even->next<<endl;
        if(even->next!=NULL){
            odd->next=even->next;
        }
        even->next=NULL;
        odd->next=copy;
        return head;
    }
};

int main(){
    ListNode* node7=new ListNode(7);
    ListNode* node6=new ListNode(6);
    node6->next=node7;
    ListNode* node5=new ListNode(5);
    node5->next=node6;
    ListNode* node4=new ListNode(4);
    node4->next=node5;
    ListNode* node3=new ListNode(3);
    node3->next=node4;
    ListNode* node2=new ListNode(2);
    node2->next=node3;
    ListNode* node1=new ListNode(1);
    node1->next=node2;
    Solution s;
    ListNode* res=s.oddEvenList(node1);
    while(res!=NULL){
        cout<<res->val<<" ";
        res=res->next;
    }
    cout<<endl;
    return 0;
}

//1 2 3 4 5 6 7